<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html lang="zh-CN"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta http-equiv="Content-Language" content="zh-CN"><link href="stylesheet.css" media="all" rel="stylesheet" type="text/css">
<title>SQL 兼容性</title>
<script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?d286c55b63a3c54a1e43d10d4c203e75"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script>
</head><body class="APPENDIX">
<div>
<table summary="Header navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr><th colspan="5" align="center" valign="bottom">PostgreSQL 8.2.3 中文文档</th></tr>
<tr><td width="10%" align="left" valign="top"><a href="sql-keywords-appendix.html" accesskey="P">后退</a></td><td width="10%" align="left" valign="top"><a href="sql-keywords-appendix.html">快退</a></td><td width="60%" align="center" valign="bottom"></td><td width="10%" align="right" valign="top"><a href="cvs.html">快进</a></td><td width="10%" align="right" valign="top"><a href="features-sql-standard.html" accesskey="N">前进</a></td></tr>
</table>
<hr align="LEFT" width="100%"></div>
<div class="APPENDIX"><h1><a name="FEATURES"></a>附录D. SQL 兼容性</h1>
<div>
<dl>
<dt><b>目录</b></dt>
<dt>D.1. <a href="features-sql-standard.html">支持的特性</a></dt>
<dt>D.2. <a href="unsupported-features-sql-standard.html">不支持的特性</a></dt>
</dl>
</div>
<p>本节试图描述 PostgreSQL 在多大程度上遵循 SQL 标准。下面的信息不是兼容性的全部内容，但是它提供了一个从用户角度来看，既合理又有用的足够的细节信息。</p>
<p>SQL 标准的正式名称是 ISO/IEC 9075 "Database Language SQL"。标准的修改版会经常地发布；最近的一个版本是在 2003 年出现的。那个版本被称作 ISO/IEC 9075:2003 ，或者简称为 SQL:2003 。这个版本之前的是 SQL:1999 和 SQL-92 。每个标准都代替了前面那个，所以声称兼容早期版本没有什么官方的好处。PostgreSQL 的开发力图瞄准兼容标准最新的正式版本，只要这样的兼容不会和传统的特性或者常识冲突。在 SQL:2003 的准备过程中，PostgreSQL 项目在 ISO/IEC 9075 工作组里面没有代表。即使如此，许多 SQL:2003 要求的特性都已经得到了支持，只是有些时候函数的语法略有不同。更多有关标准兼容的特性将在未来的版本里看到。</p>
<p>SQL-92 为兼容性定义了三个特性集：基本、中等、完全。大多数声称兼容 SQL 标准的数据库产品都只是兼容基本级别，因为中等和完全的特性要么是太庞大，要么就是和传统的行为相冲突。</p>
<p>从 SQL:1999 开始，SQL 标准定义了一个很大的独立特性集合，而不是 SQL-92 那样宽泛而又低效率的三个级别。这些特性中的一个很大的子集形成"核心"特性，它们是每种兼容 SQL 的实现必须提供的特性。其它的特性都是可选的。有些可选的特性组合在一起形成"包"，SQL 的实现可以号称遵循这些包，也就是声称遵循特定的特性组。</p>
<p>SQL:2003 标准也分裂成一系列部分：每种都用一个缩写来标识。请注意这些部分并非连续编号的。</p>
<ul>
<li><p>ISO/IEC 9075-1 框架 (SQL/Framework)</p></li>
<li><p>ISO/IEC 9075-2 基础 (SQL/Foundation)</p></li>
<li><p>ISO/IEC 9075-3 调用层接口 (SQL/CLI)</p></li>
<li><p>ISO/IEC 9075-4 永久存储模块 (SQL/PSM)</p></li>
<li><p>ISO/IEC 9075-9 外部数据管理 (SQL/MED)</p></li>
<li><p>ISO/IEC 9075-10 对象语言绑定 (SQL/OLB)</p></li>
<li><p>ISO/IEC 9075-11 信息及定义模式 (SQL/Schemata)</p></li>
<li><p>ISO/IEC 9075-13 Java 语言的过程和类型 (SQL/JRT)</p></li>
<li><p>ISO/IEC 9075-14 XML 相关的规范 (SQL/XML)</p></li>
</ul>
<p>PostgreSQL 涵盖 1, 2, 11 。3 类似 ODBC 接口，4 类似 PL/pgSQL 编程语言，但是两者都没有经过严格的标准兼容检查，也并未完全按照标准实现。</p>
<p>PostgreSQL 支持大多数 SQL:2003 的主要特性。在总共 164 个强制要求完全兼容的核心特性里，PostgreSQL 遵循至少 150 个。另外，PostgreSQL 还支持一长串可选的特性。值得一提的是，在写这些的时候，没有任何当前版本的数据库管理系统声称支持全部核心 SQL:2003 。</p>
<p>下面的两节列出了 PostgreSQL 支持的特性，以及 PostgreSQL 目前尚不支持的 SQL:2003 特性。这两个列表都是近似的：被列为支持的特性可能在某些次要细节方面与标准不一致，被列为不支持的特性也可能实际上已经被实现。文档的主题部分包含了大多数能否正常工作的精确信息。</p>
<div class="NOTE">
<blockquote class="NOTE">
<p><b>【注意】</b>包含一个连字符的特性代码表示一个子特性。因此，如果不支持特定的子特性，那么主特性也会列在不支持的特性，即使支持其它的子特性也如此。</p>
</blockquote>
</div>
</div>
<div>
<hr align="LEFT" width="100%">
<table summary="Footer navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr><td width="33%" align="left" valign="top"><a href="sql-keywords-appendix.html" accesskey="P">后退</a></td><td width="34%" align="center" valign="top"><a href="index.html" accesskey="H">首页</a></td><td width="33%" align="right" valign="top"><a href="features-sql-standard.html" accesskey="N">前进</a></td></tr>
<tr><td width="33%" align="left" valign="top">SQL 关键字</td><td width="34%" align="center" valign="top"><a href="appendixes.html" accesskey="U">上一级</a></td><td width="33%" align="right" valign="top">支持的特性</td></tr>
</table>
</div>
</body></html>